Mange mennesker ønsker at anvende web'en til udgivelse af de informationer, de opretter i QuarkXPress Passport™-format. Det kan gøres på mange måder. Den mest effektive måde er imidlertid at adskille indholdet i sådanne QuarkXPress Passport-dokumenter fra selve dokumenterne og gemme dette indhold i et struktureret format som f.eks. XML. Du kan herefter genbruge indholdet, ikke kun på web'en, men også i andre formater som tryksag, på CD-ROM du bestemmer.
Avenue.quark™-software er konstrueret for at gøre det let for dig at udtrække dit QuarkXPress Passport-indhold og gemme det i XML-format.
Med avenue.quark kan du udtrække indholdet af QuarkXPress Passport-dokumenter og gemme det i XML-format. Du kan herefter let genbruge indholdet på mange forskellige måder, herunder på web. Dette afsnit forklarer kort om processen og definitionerne. Du finder mere detaljerede forklaringer i de følgende afsnit.
Hvad er indhold?
Indholdet er de informationer, der tilsammen giver dine dokumenter værdi. Indholdet i et tidsskrift kan f.eks. bestå af artikler, fotografier, interviews og diagrammer.
Indholdet kan også defineres som hvad det ikke er. F.eks. betragtes sidehoveder og -fødder samt oplysninger som "Fortsættes på side x" som hovedregel ikke som en del af indholdet i et tidsskrift. De er snarere en del af tidsskriftets præsentation forhold vedrørende tidsskriftet, der kun er brug for, når tidsskriftet præsenteres i en trykt udgave. Afhængig af hvilket medie informationerne udgives på, kan præsentationen ændres, men indholdet forbliver som hovedregel det samme.
Med avenue.quark kan du adskille indhold fra præsentation ved at udtrække indholdet fra dine QuarkXPress Passport-dokumenter og gemme det i XML-format. Du kan herefter genbruge indholdet med forskellige præsentationer som tryksag, på web, på CD-ROM osv. Det er kun nødvendigt at tilpasse præsentationen til den enkelte situation.
Hvad er XML?
XML betyder Extensible Markup Language. XML er en metode, du anvender til at specificere indholdets struktur og mærke indholdets dele på en sigende måde.
Afmærk indholdet
Hvorfor er det nødvendigt at afmærke indholdet? Det er det, fordi vi mennesker kan tage et tidsskrift og se, at en bestemt tekstlinie er en overskrift, men dette ikke nemt for en computer at afgøre. Med XML kan du kode "mærke" informationer på en måde, som computeren kan forstå. Og når computeren først er klar over, at en bestemt tekstlinie er en overskrift, kan den automatisk formatere den pågældende linie som en overskrift.
Hvis du vil afmærke indhold i XML, skal du indsætte en XML-åbningskode før indholdet og en XML-lukkekode efter indholdet, f.eks.:
<overskrift>Internet-vækst på 400%</overskrift>Som du kan se, består en åbningskode af et elementnavn mellem tegnene < og >. En lukkekode består af det samme, men med / efter <-tegnet. Her har vi "mærket" teksten "Internet-vækst på 400%" som en overskrift, ved at anbringe teksten mellem åbnings- og lukkekoder af <overskrift>-typen.
Identificér strukturen
Vi mennesker ved af erfaring, at en nyhedsartikel som regel består af en overskrift, en forfatterlinie, brødtekst samt nogle billeder eller diagrammer med tekster. Dette er computere imidlertid ikke klar over, før du fortæller dem det.
Med XML kan du beskrive opbygningen af dokumenter med DTD'er en forkortelse for Document Type Definitions. En DTD angiver, at informationerne i et dokument anvender et bestemt sæt koder og følger et bestemt sæt strukturregler. En DTD for en nyhedsartikel kan f.eks. angive, at:
Følges reglerne i en DTD konsekvent, kan en organisation sikre, at dens dokumenter altid er struktureret på en kendt og ensartet måde. Dette gør det meget lettere for organisationen at flytte indholdet fra et medie til et andet f.eks. fra tryksag til web, eller omvendt.
Avenue.quark kræver, at der anvendes DTD'er. Se "Arbejde med DTD'er" og "Industristandard-DTD'er" i dette kapitel for oplysninger om, hvordan du opretter og tilpasser DTD'er.
Et "neutralt" format
XML er et "neutralt" format, der ikke indeholder oplysninger om formatering. Det kan derfor anvendes sammen med en bred vifte af programmer, der kan bruge forskellige typer formatering, når indholdet præsenteres via forskellige medier.
Se "Sådan fungerer XML" i dette kapitel for en mere detaljeret forklaring om XML.
Hvad kan jeg gøre med indhold, der er gemt i XML-format?
Når du først har udtrukket indholdet fra et QuarkXPress Passport-dokument, kan du anvende det på forskellige måder. Du kan f.eks. dynamisk oversætte XML-kodet indhold til HTML-format og præsentere det på web. Denne metode til konvertering af QuarkXPress Passport-indhold til HTML er bedre end simpel HTML-eksport, fordi du let kan formatere, reformatere og omorganisere indholdet.
Nu, hvor du har en generel idé om, hvad avenue.quark er, og hvordan programmet fungerer, er det på tide at se nærmere på de praktiske detaljer. Vi starter med at se nærmere på XML.
XML (Extensible Markup Language) er en metode til angivelse af strukturen i dokumenter og til afmærkning af bestemte dele af indholdet med koder. Med XML's strukturelle kontroller kan du sikre dig, at alle nødvendige dele af det pågældende dokument findes og optræder i den korrekte rækkefølge. Når indholdet afmærkes, er det let for andre programmer at anvende eller vise det pågældende indhold.
Inden vi ser nærmere på, hvordan XML udfører alt dette, er det imidlertid en god idé at se på, hvorfor det er nødvendigt.
Problemerne som XML løser
XML er en videreudvikling af et ældre og mere kompliceret "afmærkningssprog", ved navn SGML (Standard Generalized Markup Language). XML blev skabt for at løse et antal relaterede problemer. Visse problemer blev løst i SGML, og andre er unikke.
Strukturering og afmærkning af information
XML kaldes nogle gange for et "meta-sprog", fordi sproget gør det muligt for brugeren at definere mærkesprog til bestemte formål. Dette sker ved at oprette en DTD (Dokumenttype definition). En DTD angiver hvilke typer af information der kan være i et dokument, hvordan de forskellige dele af dokumentet skal kodes (afmærkes), hvilken rækkefølge delene skal komme i, og hvor mange gange hver del må forekomme. Et dokument betragtes kun som "gyldigt" i forhold til en bestemt DTD, hvis det overholder reglerne i DTD'en.
Med DTD'er kan du opretholde strukturen i dokumenter. Hvis du har et dokuments DTD, er du allerede klar over, hvilke informationer, der forventes, når du åbner det pågældende dokument. DTD'er gør det også nemmere for computere at behandle informationer i XML-dokumenter. Hvis en computer kan "forstå" en DTD, kan den "forstå" informationerne i ethvert XML-dokument, der overholder reglerne i den pågældende DTD. Med et bestemt dokuments DTD kan et computerprogram f.eks. lade dig søge efter hver forekomst af en bestemt informationstype (som f.eks. firmanavn) i dokumentet, eller producere en HTML-side der viser alle forekomster af den ønskede type informationer (f.eks. en oversigt over firmanavne).
Der er allerede udviklet særlige DTD'er til kemisk, matematisk og teknisk dokumentation og endda til skønlitterært arbejde. Mulige anvendelsesområder omfatter bl.a. kontrol med arbejdsforløb, software-specifikationer og stort set alle andre områder, der medfører udveksling af struktureret information.
Lige en sidebemærkning: I modsætning til SGML kan du med XML oprette "veludformede" dokumenter det vil sige dokumenter, der følger reglerne i XML, men som ikke følger en bestemt DTD. Det er imidlertid vanskeligt at opretholde ensartethed mellem dokumenter, hvis du ikke anvender en standard, og det er derfor, avenue.quark kræver, at du anvender DTD'er,
Udnyttelse af HTML
HTML har vist sig at være et kraftigt og universelt format til visning af informationer på World Wide Web. Formatet har imidlertid to store mangler: Det beskriver kun formateringen af data, ikke deres betydning, og du kan ikke oprette nye HTML-koder.
XML løser begge disse problemer. Hvis du anvender XML til mærkning af data i et XML-dokument, kan du derfor basere HTML-formateringen på disse mærker. Forestil dig, at du har et XML-dokument, der indeholder en liste over firmaer og et antal oplysninger om hvert enkelt firma. For at ændre denne liste til en HTML-web-side, hvor hvert firmanavn vises med fed skrift, skal du blot anvende en XML-til-HTML-konverter og fortælle konverteren, at hver linie, der er mærket som <firmaNavn>, skal vises med fed skrift. Det betyder, at det ikke længere er nødvendigt at gennemgå dokumentet og formatere de enkelte navne og adresser manuelt. De mulige tidsbesparelser for personer, der opretter web-steder, er enorme.
Informationsudveksling
Da computerprogrammer er udviklet af mange forskellige personer og organisationer til mange forskellige brugere, gemmer de informationer i mange forskellige formater. To forskellige virksomheder gemmer måske deres kundeoplysninger i to komplet forskellige formater, selvom de kundeoplysninger, virksomhederne gemmer (navn, adresse, telefonnummer osv.), grundlæggende er de samme.
XML løser denne type problemer ved at tilbyde et standardiseret, produktuafhængigt format til overførsel af informationer mellem programmer. XML blev udviklet, forfinet og godkendt af en gruppe specialister fra forskellige brancher, der arbejdede sammen som en del af World Wide Web Consortium (W3C). Specifikationerne er tilgængelige for enhver, der ønsker at anvende dem (se www.w3.org), og det gør mange organisationer og brancher allerede.
Bliver to virksomheder enige om at anvende software, der kan konvertere deres poster til XML med en godkendt DTD, kan de udveksle disse poster efter behag uden risiko for at datatab på grund af ikke-kompatible formater. Se "Industristandard-DTD'er" i dette kapitel for flere oplysninger om DTD'er og informationsudveksling.
Se "Arbejde med XML" i dette kapitel for en mere detaljeret gennemgang af XML.
Et XML-dokument indeholder strukturerede data, der er opdelt i "elementer", der hver især er beskrevet med XML-koder.
XML-elementer og XML-koder
Et XML-element indeholder et antal informationer som f.eks. et firmanavn, en overskrift eller et reservedelsnummer. Du opretter et element ved at anbringe nogle informationer mellem to XML-koder: en åbningskode der indeholder elementets navn mellem et mindre-end-tegn og et større-end-tegn, og en lukkekode der er den samme bortset fra, at der findes en skråstreg (/) i elementnavnet. Et afmærket "navn"-element kan f.eks. se således ud:
<navn>Gertrud</navn>Det er vigtigt at forstå forskellen mellem et XML-element og en XML-kode. En XML-kode er blot det mærke, der er knyttet til nogle informationer. Et XML-element indeholder derimod både informationerne og de koder, der omgiver dem.
Med XML-koder kan du beskrive og føje struktur til de data, de omgiver. Nedenstående indledningsafsnit er f.eks. forsynet med koden <introduktion>:
<introduktion>Inde i elementet <introduktion> kan du kode andre underelementer for yderligere at strukturere dokumentet:
<introduktion>Syntaksen er vigtig, når det gælder XML-koder. I modsætning til HTML-koder, er der forskel på store og små bogstaver. Koden <Navn> er forskellig fra koden <navn>, der igen er forskellig fra koden <NAVN>. De enkelte XML-kodenavne skal starte med et bogstav eller en understreg (_), efterfølgende tegn i navnet kan være bogstaver, understreger, tal, bindestreger og punktummer, men ikke mellemrum eller tabulatortegn. Navnet <_.dir> er en korrekt XML-kode, hvorimod navnene <_ dir> og <.dir> ikke er korrekte. Navnet <_ dir> er ikke korrekt, fordi det indeholder blanktegn (tabulator eller mellemrum) efter understregen. Navnet <.dir> er ikke korrekt, fordi det starter med et punktum i stedet for en understreg eller et bogstav.
Det er vigtigt at være opmærksom på forskellen mellem "elementer" og "elementtyper". En elementtype kan betragtes som et særligt kodenavn, der kan anvendes til data. Et element er data, der omgives af koder. Et dokument, der f.eks. indeholder en række navne og adresser, indeholder måske kun to elementtyper, <navn> og <adresse>, men flere hundrede elementer, der anvender disse koder.
XML-attributter
Forestil dig, at du arbejder med elementer, der er mærket med koden <bil>, og at du ønsker at kunne angive flere informationer om de enkelte <bil>-elementer, du opretter. Du ønsker f.eks. at kunne angive et bestemt <bil>-element ikke kun som en bil men som en hurtig, gul og dyr bil.
Dette kan du gøre på flere forskellige måder. En fremgangsmåde involverer oprettelse af yderligere elementtyper, som vist herunder:
<bil>En anden (og måske "pænere") måde at gøre det på, er at bruge den XML-funktion, der kaldes attributter. Attributter er konstrueret, så de kan forsyne et element med informationer. Attributterne er inkluderet i et elements åbningskode, så der er aldrig tvivl om hvilket element, de er relateret til.
En attribut består af et attributnavn, fulgt af et lighedstegn, der igen er fulgt af en attributværdi mellem anførselstegn. Nedenstående enkeltelement indeholder f.eks. de samme tre attributter som i eksemplet på foregående side:
<bil hastighed="hurtig" farve="gul" pris="dyr">Attributter er praktiske af forskellige årsager. Med attributter er det f.eks. let at gennemsøge et dokument og oprette en oversigt over alle de <bil>-elementer, der indeholder værdien "dyr" i prisattributten. De kan også være praktiske i forbindelse med tomme elementer. Se det næste afsnit for detaljer.
Tomme elementer
Tomme elementer indeholder en åbningskode og en lukkekode, men omgiver ikke data, som vist herunder:
<IDnummer></IDnummer>Da der i tomme elementer ikke findes indhold mellem åbnings- og lukkekoderne, kombineres koderne ofte således:
<IDnummer/>Du kan anvende attributter sammen med tomme elementer til at henvise til URL-adresser eller til eksternt gemte dokumenter. Nedenstående tomme element kan f.eks. (med en passende XML-fortolker) anvendes til visning af et billede af en bil:
<bilBillede URL-adresse="1995BMW323.jpg"/>Bemærk: Selvom du føjer en attribut med navnet "URL-adresse" til et element, er der ingen garanti for, at der er adgang til URL-adressen, når XML-filen behandles. Det program, der behandler filen, skal vide, hvad der skal ske med URL-adresse-attributten.
Kommentarer
På samme måde som i HTML kan du medtage kommentarer i en XML-fil. Kommentarer omsluttes af <!-- og --> og ignoreres groft sagt af XML-processorerne. Hvis du vil indsætte en kommentar om status på et <adresse>-element kan du f.eks. gøre følgende:
<Adresse>Behandlingsinstruktioner
I HTML anvendes kommentarer ofte til "opbevaring" af særlige kommandoer til browsere og andre HTML-processorer. I et forsøg på at begrænse XML-kommentarer til netop dét at være kommentarer har XML-specificationens ophavsmænd medtaget en metode til indsættelse af brugertilpassede kommandoer i XML-filer og DTD'er. Sådanne tilpassede kommandoer, der kaldes behandlingsinstruktioner (processing instructions eller "PI'er"), er ganske enkelt omgivet af <? og ?>. PI'erne starter med et programnavn, efterfulgt af et mellemrum og de informationer der kan være af interesse for det navngivne program. Behandlingsinstruktioner kan anvendes alle de steder, hvor der kan anvendes kommentarer.
XML-erklæringer
Hvert XML-dokument kan og bør starte med en XML-erklæring. På samme måde som en behandlingsinstruktion er en XML-erklæring indesluttet mellem <? og ?>. Her er et eksempel på en XML-erklæring:
<?xml version="1.0" standalone="yes"?>Attributten "version" erklærer, at det pågældende dokument lever op til reglerne i XML 1.0. Attributten "standalone" (enkeltstående) indikerer, at alle de afmærkningserklæringer, der er nødvendige for at behandle dokumentet, findes i det.
Entitetshenvisninger
En entitetshenvisning er et ord, der fungerer som en forkortelse for et tegn, en streng eller en fil. Ved f.eks. at anvende entitetshenvisningen &l; til at repræsentere et mindre-end-tegn (<) i indholdet i et XML-dokument, undgår du at forvirre XML-fortolkeren (der ellers fejlagtigt ville læse tegnet "<" som starten på en kode). Se "Brug af entitetshenvisninger" i afsnittet "Arbejde med DTD'er" i dette kapitel for flere oplysninger om entitetshenvisninger.
Veludformet XML
For at et XML-dokument betragtes som veludformet kan og bør det starte med en XML-erklæring og have et rodelement, der indeholder alle dets øvrige elementer (<artikel> i eksemplet herunder). En veludformet XML kræver også, at hvert element i dokumentet har en tilhørende lukkekode. Herunder ses et eksempel på et veludformet XML-dokument:
<?xml version="1.0" standalone="yes"?>Gyldig XML
Et veludformet XML-dokument kan have begrænset funktionalitet, hvis det ikke er også er gyldigt. Et XML-dokument betragtes som gyldigt, når det overholder specifikationerne i en bestemt DTD. Se "Arbejde med DTD'er" i dette kapitel for flere oplysninger om DTD'er og godkendelse af XML-dokumenter.
XML-processorer
En XML-processor er ganske enkelt et program der læser en XML-fil og behandler det. Der findes forskellige typer XML-processorer. En XML-processor konverterer måske en XML-fil til en HTML-web-side, en PDF-fil eller en PostScript-fil. Eller den oplæser indholdet i XML-filen eller konverterer indholdet til braille-skrift. En XML-processor kan endda anvendes til kopiering af struktureret XML-indhold til en database.
XML-analysatorer
En XML-analysator genkender XML-reglerne og undersøger, om et XML-dokument er veludformet. Men en XML-analysator undersøger ikke nødvendigvis, om et XML-dokument er gyldigt i forhold til dets DTD. Dette kræver en godkendende XML-analysator (se herunder).
Godkendende XML-analysatorer
Godkendende XML-analysatorer sammenligner et XML-dokument med en DTD og kontrollerer, om dokumentet overholder DTD-reglerne. En god validerende analysator giver også konstruktive tilbagemeldinger om de problemer, den finder i XML-filen. Se "Arbejde med DTD'er" i dette kapitel for flere oplysninger om XML-analysatorer.
Se appendiks A "XML en hurtig gennemgang" i kapitel 7 "Appendiks" for en hurtig oversigt over XML-funktioner og -konventioner.
En DTD (Document Type Definition) angiver hvilke elementer en XML-fil kan indeholde, og hvordan disse elementer skal struktureres. XML-dokumenter har ikke nødvendigvis en tilhørende DTD. Så længe en XML-fil følger den grundlæggende XML-syntaks, betragtes det som "veludformet" og kan læses af et program, der forstår XML. Men en XML-fil betragtes kun som "gyldig", hvis den overholder en bestemt DTD.
DTD'er er vigtige, fordi de leverer en stabil, veldokumenteret struktur til XML-dokumenter. Uden DTD'er beslutter to organisationer, der arbejder sammen, måske at strukturere og kode deres XML-dokumenter på vidt forskellige måder. Det ville gøre deres data helt inkompatible, selv efter at de begge er flyttet til XML. Men anvender begge organisationer den samme DTD måske en DTD de har udviklet i fællesskab, eller en DTD der er en standard i deres branche kan de udveksle informationer let og med et forudsigeligt resultat.
Eksterne og interne DTD'er
Der findes to typer DTD'er: Eksterne DTD'er og interne DTD'er.
Teknisk set består en DTD af en liste med afmærkningserklæringer (elementerklæringer, attributerklæringer, entitetserklæringer, notationer, behandlingsinstruktioner samt kommentarer), som der henvises til med en DOCTYPE-erklæring. Hvad der i dette dokument kaldes "eksterne DTD'er" og "interne DTD'er", er ikke teknisk komplette DTD'er, men det er praktisk og ganske almindeligt at henvise til dem på denne måde.
Eksterne DTD'er
En ekstern DTD (eller et eksternt undersæt) er en fil, der indeholder en liste med afmærkningserklæringer. Eksterne DTD'er er lette at dele mellem XML-dokumenter og mellem organisationer. For at anvende en ekstern DTD i en XML-fil skal du blot henvise til den i starten af XML-filen som her:
<?xml version="1.0" standalone="no">Interne DTD'er
En intern DTD (eller internt undersæt) er i virkeligheden inkluderet i den XML-fil, den beskriver. For at anvende en intern DTD i en XML-fil skal du blot tilføje den i starten af XML-filen som her:
<?xml version="1.0" standalone="yes">Hvis et dokument anvender en ekstern DTD (eller et hvilket som helst andet eksternt entitetselement), skal attributten "standalone" i den første linie indstilles til "no". Se "Brug af entitetshenvisninger" i dette afsnit for flere oplysninger.
Kombinér interne og eksterne DTD'er
I et givet XML-dokument kan du angive en ekstern DTD og herefter tilføje eller tilsidesætte denne DTD med en intern DTD. Et XML-dokument af denne type kan se således ud:
<?xml version="1.0" standalone="no">Planlægning af en DTD
Du vil ikke være hensigtsmæssigt blot at sætte sig ned og begynde at skrive en DTD. Det kræver omfattende planlægning, hvis det skal gøres rigtigt.
Inden du går i gang med at oprette din egen DTD, kan det være en god idé at overveje at anvende en standard-DTD. Se "Industristandard-DTD'er" i dette kapitel for flere oplysninger om denne mulighed.
En god måde at starte på er helt konkret at finde ud af, hvad du ønsker, at din DTD skal udføre. Start med at finde ud af hvilke elementer du vil anvende. Hvis du ønsker at anvende elementer som f.eks. <adresse>, skal du bestemme, om du vil underopdele disse elementer i underelementer som f.eks. <gadenavn>, <gadenummer>, <postNummer> og <By>. (Tænk meget nøje over disse underopdelinger, hvis der er mulighed for, at du på et senere tidspunkt ønsker at overføre indholdet i dine XML-filer til en database).
Det var den lette del. Her ud over er du nødt til at finde ud af relationerne mellem alle disse elementer. En DTD kan angive hvilke elementer, der er tilladt, hvilken rækkefølge de skal befinde sig i og hvilke (og hvor mange) underelementer, de må indeholde. DTD'en kan angive hvilke andre elementer, der kan indeholde et bestemt element, og den kan angive, om et bestemt element skal indeholde data eller ej.
Eliotte Rusty Harold anbefaler i XML: Extensible Markup Language at bruge en tabel som en hjælp til fastlæggelse af relationerne mellem de forskellige elementer i en DTD. Tabellen bør indeholde følgende kolonner (dataene i kolonnerne er kun eksempler):
Elementnavn | Skal indeholde | Kan indeholde | Skal indeholdes i |
<adresse> | <gadeNavn>, <by>, <land>, <postNummer> | <careOf> | <personligeData> |
<gadeNavn> | <adresse> |
Hver række i tabellen repræsenterer et element, som du vil anvende i din DTD.
Brug en DTD
Ligesom en XML-fil består en DTD af almindelig tekst. En XML-fil kan undlade at bruge en DTD eller bruge en ekstern DTD, en intern DTD eller både en ekstern og en intern DTD.
Uanset hvilken DTD-type et XML-dokument anvender, skal dokumentet henvise til eller inkludere den pågældende DTD i sin indledning (åbningssektion), umiddelbart efter XML-erklæringen, og inden brødteksten i XML-dokumentet. DTD-sektionen starter med "<!DOCTYPE rodnavn [" og slutter med "]>". Herunder er f.eks. vist et komplet XML-dokument som indeholder en komplet DTD (med fed skrift):
<?xml version="1.0" standalone="yes">Lad os prøve at opdele tingene lidt:
Som du kan se, angiver hver elementtypedefinition både elementets navn og de datatyper, det pågældende element kan indeholde. Hvis du vil ændre elementtypedefinitionen for <meddelelse>, så den kan indeholde tekst og kun tekst (det vil sige ingen andre elementer), kan du gøre det ved at ændre nøgleordet "ANY" til "(#PCDATA)" som her:
<?xml version="1.0" standalone="yes">Men det ønsker du sikkert ikke at gøre, fordi det betyder, at dine dokumenters rodelementer kun kan indeholde analyserede tegndata (se bemærkningen herunder), og du vil ikke være i stand til at tilføje flere elementer for at underopdele informationen.
"PCDATA" er en forkortelse for "Parsed Character DATA" (analyserede tegndata): Det vil sige tekst, der kan indeholde entitetshenvisninger, kommentarer og behandlingsinstruktioner.
Lad os se nærmere på en mere realistisk DTD. Den følgende interne DTD definerer opbygningen af et register med afdelingskontorer:
<!-- Rodelement er <afdelingsKontorRegister> -->Bemærk: Der er indsat en kommentar, der indikerer, at <afdelingsKontorRegister> er DTD'ens rodelement. Det er gjort, fordi en DTD ikke entydigt selv kan udpege et rodelement. Angivelse af rodelementet er et teknisk job for linien !DOCTYPE i et XML-dokument. Men der er en god idé at angive rodelementer med en kommentar, så DTD'ens brugere kan se, hvad det er.
Nogle DTD'er kan indeholde mere end ét element der kan fungere som et rodelement. Du kan f.eks. skrive en DTD der indeholder definitioner på forskellige dokumenttyper (f.eks. White Papers og FAQ'er) og herefter anvende DTD'en til oprettelse af begge dokumenttyper ved blot at angive <whitePaper> eller <FAQ> som rodelementet i hver XML-fil.
De resterende linier i DTD'en erklærer elementer for hvert kontors gadenavn, bynavn, amt, postnummer, land, telefon- og faxnummer samt e-mail-adresse.
Kontrollér kodevalg og rækkefølge
Den ovenstående DTD er måske tilstrækkelig til dit brug, men den udnytter i virkeligheden ikke alle fordelene ved funktionerne i XML. Den indeholder f.eks. ikke indikation af hvilke adresseelementer der hører til hvilke kontorer, og den angiver ikke en bestemt informationsrækkefølge. På denne måde kan du oprette et dokument der indeholder alle de forskellige byer, gader, telefonnumre osv. i tilfældig rækkefølge, som stadig er gyldigt i forhold til denne DTD.
For at give DTD'en en meningsfuld struktur har du brug for en metode til at knytte samtlige komponentelementer på hver liste sammen og anbringe dem i en bestemt rækkefølge. En måde at gøre dette på er at oprette et container-element, der indeholder de relevante informationer for ét kontor (lad os kalde det for <afdelingsKontor>), og herefter angive, hvilke underelementer der skal udgøre det pågældende container-element samt den rækkefølge, de skal forekomme i. Vi kan gøre alt dette ved at føje en enkelt linie til DTD'en (vist med fed skrift):
<!-- Rodelement er <afdelingsKontorRegister> -->Det nye element udtryker hermed følgende: "Hvis dokumentet indeholder et element med navnet <afdelingsKontor>, skal dette element indeholde nøjagtig ét af hvert af de følgende elementer, i denne rækkefølge, og intet andet".
Hvad nu, hvis nogle af dine afdelingskontorer har mere end en linje i adressen? Du kan tillade en eller flere forekomster af ethvert element i en liste med underelementer ved at tilføje et + i slutningen af elementets navn. Ønsker du f.eks. at tillade et eller flere <gadeNavn>-elementer i elementet <afdelingsKontor>, kan du gøre det på følgende måde:
<!ELEMENT afdelingsKontor (gadeNavn+, by, amt, postNummer, land, telefon, fax, eMail)>Hvad nu, hvis nogle af dine afdelingskontorer ikke har en telefax? Og måske har nogle af kontorerne flere telefax'er. For at angive at der må være nul eller flere forekomster af et element, skal du anbringe en * (stjerne) i slutningen af elementnavnet, som vist her:
<!ELEMENT afdelingsKontor (gadeNavn+, by, amt, postNummer, land, telefon, fax*, eMail)>Og hvad nu, hvis nogle af dine afdelingskontorer befinder sig i lande, der ikke bruger postnumre? For at angive at der må være nul eller én forekomst af et element, skal du anbringe et ? i slutningen af elementnavnet, på denne måde:
<!ELEMENT afdelingsKontor (gadeNavn+, by, amt, postNummer?, land, telefon, fax*, eMail)>I eksemplet har vi anvendt elementet "amt". Måske har du for nogle kontorers vedkommende brug for at angive en kommune i stedet. Ønsker du mulighed for at anvende et <amt>-element eller et <kommune>-element, kan du gøre dette ved at adskille de to muligheder med et |-tegn og anbringe dem i en parentes, som du kan se her:
<!ELEMENT afdelingsKontor (gadeNavn+, by, (amt|kommune), postNummer?, land, telefon, fax*, eMail)>Til sidst kan vi sikre os, at et <afdelingsKontorRegister> udelukkende består af <afdelingsKontor>-navne ved at ændre definitionen af <afdelingsKontorRegister> fra ANY til (afdelingsKontor*). Sådan ser det endelige resultat ud:
<!-- Rodelement er <afdelingsKontorRegister> -->Resumé:
Tegn | Betydning |
Intet | Nøjagtigt én |
+ | En eller flere |
* | Nul eller flere |
? | Nul eller en |
Disse specialtegn kan anvendes sammen med parenteser til oprettelse af komplekse elementtypeerklæringer som i den nedenstående DTD, der er beregnet til at håndtere daglige kontaktinformationer:
<!-- Rodelement er <kontaktTidspunkt> -->På en bestemt dag befinder personen på listen sig enten på kontoret, hjemme eller på en alternativ adresse. Derfor kan hvert <kontaktOplysning>-element indeholde følgende liste med informationer, med underelementer i den nævnte rækkefølge:
Tillade tomme koder
Du ønsker sikkert at skrive dine XML-dokumenter på en sådan måde, at de er lette at oversætte til HTML-format. Er det tilfældet, kan du inkludere koder som f.eks. <BR> og <HR> i en XML-fil, så de direkte kan overføres til HTML-filen.
Du kan imidlertid ikke gøre dette pr. automatik i XML, fordi ethvert element skal have en lukkekode. I stedet kan du oprette såkaldte EMPTY-koder og herefter lade et XML-til-HTML-konverteringsprogram håndtere oversættelsen til korrekte HTML-koder. For at tillade oprettelse af <HR>-koder, kan du f.eks. inkludere den følgende linie i DTD'en:
<!ELEMENT HR EMPTY>For at anvende denne kode kan du indsætte en linie som nedenstående i din XML-fil:
<HR/>Du kan ikke inkludere koden som "<HR>", fordi hver XML-kode skal have en lukkekode eller slutte med en almindelig skråstreg, men det er i orden. Et XML-til-HTML-konverteringsprogram bør kunne konvertere <HR/> til <HR>.
EMPTY-koder anvendes ofte til opbevaring af billeder. Billedets URL-adresse er gemt i en af EMPTY-kodens attributter. Se "Definering af attributter" i dette afsnit for yderligere informationer om attributter.
Brug af tegnhenvisninger
En tegnhenvisning er en metode til repræsentation af Unicode-tegn i analyserede tegndata. Syntaksen for tegnhenvisninger er denne:
&#UnicodetegnVærdi;Vil du f.eks. indsætte Euro-tegnet før tallet 500 i et <euro>- element, kan du gøre følgende (tegnhenvisningen er med fed skrift):
<euro>€5000</euro>Det er XML-processorens opgave at erstatte tegnentitetshenvisninger med det pågældende Unicode-tegn ved udlæsningen.
Brug af entitetshenvisninger
En entitetshenvisning er et lille tekststykke, der repræsenterer noget andet, f.eks. et tegn, en tekststreng, en eksternt gemt XML-fil eller en binær fil (som f.eks. en billed- eller en lydfil). Der findes fem slags entitetshenvisninger:
De forskellige typer entitetshenvisninger er forklaret detaljeret herunder.
Hvad er forskellen mellem en entitet og en entitetshenvisning? En entitetshenvisning er den forkortelse, du indsætter i et XML-dokument for at repræsentere en entitet. En entitet er det indhold, der erstatter entitetshenvisningen, når XML'en behandles.
Analyserede interne entitetshenvisninger
En analyseret intern entitetshenvisning er grundlæggende en forkortelse for en tegnstreng, som du regner med at genbruge ofte i et bestemt XML-dokument. Formatet til erklæring af en analyseret intern entitetshenvisning i en DTD er følgende:
<!ENTITY entitetsNavn "erstatningstekst ">Forestil dig f.eks., at du opretter et XML-dokument der indeholder en oversigt over dine medarbejdere, samt nogle informationer om hver af dem. Hver medarbejders datapost er nødt til at indeholde vendingen "Anciennitet:" efterfulgt af et tal. I stedet for at skrive vendingen igen og igen manuelt kan du oprette en analyseret intern entitetshenvisning for vendingen som en del af dokumentets DTD, som vist her:
<!-- Rodelement er <personaleOversigt> -->For at anvende den analyserede interne entitetshenvisning "anc" i XML-dokumentet, kunne vi nu gøre følgende:
<ansat>Når elementet <personale> behandles, udvider XML-processoren den analyserede interne entitetshenvisning, hvilket resulterer i følgende XML:
<ansat>Der findes fem foruddefinerede analyserede interne entitetshenvisninger i XML. I modsætning til alle andre analyserede interne entitetshenvisninger er de en del af XML-specifikationen, og det er derfor ikke nødvendigt at erklære dem.
Tegn | Entitetshenvisning |
< | < |
> | > |
& | & |
" | " |
' | ' |
Forestil dig, at du f.eks. ønsker at anvende et større-end-tegn (>) i indholdet i et XML-dokument. Som du ved, indikerer større-end-tegnet afslutningen på en kode i XML. For at undgå at forvirre XML-processoren kan du erstatte større-end-tegnet med ">" de steder, det forekommer. For at udtrykke "alt > summen af de enkelte elementer" i en XML-fil, kan du gøre følgende:
<citat>Der findes tre begrænsninger for brugen af analyserede interne entitetshenvisninger:
Analyserede eksterne entitetshenvisninger
Med en analyseret ekstern entitetshenvisning kan du inkludere indhold, der er gemt i en eksternt gemt tekstfil. Analyserede eksterne entitetshenvisninger bør erklæres i DTD'en på en af de følgende måder:
<!ENTITY entitetsNavn SYSTEM "URL-adresse på fil der henvises til ">I det første eksempel kan du anvende URL-adressen til en bestemt fil. I det andet eksempel anvender du navnet på en ressource, der kan henvise til en URL-adresse. Den URL-adresse, der følger efter, er en "reserve" URL-adresse som kun anvendes, hvis navnet ikke kan bruges.
Analyserede eksterne entitetshenvisninger kan anvendes til deling af indhold mellem XML-filer. Her er f.eks. et komplet XML-eksempeldokument, hvor indholdet er gemt i en tekstfil med navnet "minfil.txt" på Quark™'s web-sted:
<?xml version="1.0" standalone="no">Det er praktisk, fordi du også kan anvende indholdet i "minfil.txt" i andre XML-filer.
Hvis et dokument anvender eksterne entitetshenvisninger, bør du indstille attributten "standalone" i XML-erklæringen til "no".
Ikke-analyserede eksterne entitetshenvisninger
Hvad nu, hvis du ønsker at henvise til et billede, regneark, en lydfil, HTML-fil eller en anden ikke-XML-fil i et XML-dokument? Du kan ikke anvende en analyseret ekstern entitetshenvisning, fordi XML-processoren vil forsøge at analysere din binære fil, og det medfører fejl.
For at løse dette problem kan du anvende en notation i slutningen af den eksterne entitetshenvisning. En notation sørger for, at XML-processoren ikke analyserer målfilen, og indikerer hvilket type fil der er tale om. Formatet for erklæring af en notation i en DTD er følgende:
<!NOTATION notationsNavn SYSTEM "ProgramNavn">Ønsker du f.eks. at oprette en forbindelse mellem JPEG-filer og Adobe® Photoshop®, kan du føje en notation som følgende til DTD'en:
<!NOTATION jpeg SYSTEM "Adobe Photoshop">For at udnytte en notation i en ekstern entitetshenvisningserklæring skal du anvende følgende syntaks:
<!ENTITY entitetsNavn SYSTEM "URL-adresse" NDATA notationsNavn>Ønsker du f.eks. at oprette en entitet med navnet "mitBillede", der henviser til en URL-adresse, der indeholder en JPEG-fil, kan du anvende følgende kode:
<!ENTITY mitBillede SYSTEM "http://www.quark.com/billede.jpg" NDATA jpeg>Du kan også anvende syntaksen PUBLIC med notationer, der først angiver navnet på en offentlig notation og derefter en reserve-URL-adresse-notation:
<!ENTITY mitBillede PUBLIC "-//Quark//Fiktivt JPEG navn""http://www.quark.com/xml/billede.jpg" NDATA jpeg>Andre metoder til henvisning til eksterne filer: Ikke-analyserede entitetshenvisninger er ikke den eneste metode til henvisning til eksterne filer i XML-filer uden at angive, at de skal analyseres. Du kan også gemme URL-adressen til en sådan fil som almindeligt element- eller attributindhold. Det første eksempel herunder henviser til URL-adressen på en billedfil som elementindhold, og det andet eksempel henviser til den samme URL-adresse som attributindhold:
Om du vælger at bruge ikke-analyserede entiteter, elementer, eller attributter for at henvise til ikke-XML-filer, er helt op til dig. Hver af disse metoder fungerer lige godt, så længe det program, der behandler XML'en, er klar over, at URL-adresserne altså er URL-adresser.
Interne parameterentitetshenvisninger
Hvis du vil oprette en entitetshenvisning som kun anvendes i en bestemt DTD, skal du oprette en parameterentitetshenvisning. En intern parameterentitetshenvisning minder meget om en analyseret intern entitetshenvisning, bortset fra den starter med et %-tegn i stedet for et &-tegn, både når du erklærer den, og når du anvender den:
<!ENTITY % entitetsNavn "entitetsdefinition">Du kan anvende interne parameterentitetshenvisninger i en DTD's eksterne undersæt på samme måde, som når du anvender analyserede interne entiteter i et XML-dokument. Her anvendes f.eks. en intern parameterentitetshenvisning til oprettelse af en forkortelse med en henvisning til en indholdsmodel, der beskriver en persons navn:
<!ENTITY % navn "(forNavn, efterNavn)">Dette er praktisk, da det er let for dig at ændre definitionen af alle navnetyper på én gang. Så hvis du f.eks. beslutter, at du også vil gemme mellemnavne for alle arbejdsgivere, ansatte og kunder, skal du blot ændre den interne parameterentitetserklæring herover til:
<!ENTITY % navn "(forNavn, mellemNavn, efterNavn)">Bemærk: Denne type interne parameterentitetshenvisninger kan kun anvendes i en DTD's eksterne undersæt.
Eksterne parameterentitetshenvisninger
En ekstern parameterentitetshenvisning minder meget om en analyseret ekstern entitetshenvisning, bortset fra. at den starter med tegnet % i stedet for tegnet &, både når du erklærer den og når du bruger den. De følgende to linier (fra et XML-dokuments interne undersæt) opretter f.eks. først en entitetshenvisning, der peger på en ekstern DTD, der hedder "standardOverskrift.dtd" og herefter inkluderer denne eksterne DTD i XML-filen:
<!ENTITY % standardOverskrift SYSTEM "standardOverskrift.dtd">Se "Anvende offentlige DTD'er" i dette afsnit for flere oplysninger om denne anvendelse.
Parameterentitetshenvisninger kan kun anvendes inden i en DTD.
Interne og eksterne parameterentitetshenvisninger kan bruges sammen. Du kan f.eks. bruge interne parameterentitetshenvisninger i det interne undersæt for at henvise til entiteter, der er defineret i det eksterne undersæt. Dette er praktisk, fordi du så kan ændre definitionen på en entitet, uden det er nødvendigt at ændre det interne undersæt i XML-filer, der anvender den pågældende entitet. Du kan f.eks. inkludere følgende erklæring i en tekstfil med navnet "entiteterFil.txt":
<!ENTITY % navnEntitet "<!ELEMENT navn (forNavn, efterNavn)>">Herefter skal du i XML-dokumentets interne undersæt inkludere følgende:
<!-- Inkludér filen der indeholder den ovenstående entitet -->>Du kan nu at ændre definitionen på entitetshenvisningen navnEntitet i et vilkårligt antal XML-dokumenter ved blot at ændre det i filen "entiteterFil.txt".
Definition af attributter
Ud over at rumme indhold kan elementer også have tilknyttet attributter (se "Sådan fungerer XML" i dette kapitel). Der er ikke enighed om attributternes rolle, men lad os for forklaringsformålets skyld antage, at en attribut kan indeholde information om et element der er vigtigt for XML-processoren, men som ikke er en del af indholdet af selve XML-filen.
Forestil dig, at du f.eks. anvender XML til vedligeholdelse af en bogoversigt til visning på et web-sted. Oversigten kan vises på to måder: Som en komplet oversigt eller som en oversigt over alle de bøger, der er føjet til listen indenfor de seneste 10 dage. For at få dette til at fungere er det nødvendigt, at XML-dokumentet indikerer hvilken dato, bogen er indtastet.
Du kan tilføje en <datoTastet>-subkode til definitionen i <bog>-koden, men den dato, hvor en bestemt bog er tastet i dit system, er i virkeligheden ikke en oplysning om selve bogen, så du ønsker sikkert i stedet at oprette en attribut med navnet "datoTastet".
Syntaksen for attributerklæringen er følgende:
<!ATTLIST elementNavn attributNavn AttributType StandardVærdi>For at give elementet <bog> en "datoTastet"-attribut med en standardværdi på "01/01/2000" skal vi derfor føje denne linie til DTD'en:
<!ATTLIST bog datoTastet CDATA "01/01/2000">For at anvende denne attribut i et <bog>-element skal vi blot anvende et attributværdipar som her:
<bog datoTastet="11/11/1998">Denne attribut forsyner XML-processoren med den nødvendige information til at vise bøgerne på basis af indtastningsdatoen.
Krævede, underforståede og faste attributter
En attribut kan være krævet (required), underforstået (implied) eller fast (fixed). En krævet attributstandard angiver, at elementet skal indeholde denne attribut. Den følgende attributerklæring angiver f.eks., at hvert <bog>-element skal have attributten "datoTastet":
<!ATTLIST bog datoTastet CDATA #REQUIRED>En underforstået attributstandard indikerer, at elementet kan (men ikke nødvendigvis skal) indeholde denne attribut efter XML-konstruktørens bestemmelse. Den følgende attributerklæring angiver f.eks., at hver <bog> kan (men ikke nødvendigvis skal) indeholde attributten "datoTastet":
<!ATTLIST bog datoTastet CDATA #IMPLIED>En fast attributværdi indikerer, at attributten skal indeholde en nøjagtig værdi for hvert element. Den følgende attributerklæring angiver f.eks., at hver <bog> skal have en "datoTastet"-værdi, der svarer til "11/11/1998":
<!ATTLIST bog datoTastet CDATA #FIXED "11/11/1998">I dette eksempel antager XML-processoren, at alle <bog>-elementer har en "datoTastet"-attribut, der er indstillet til "11/11/1998", også selvom attributten udelades.
Hvis en attributerklæring har en standardværdi, men ikke angiver #REQUIRED, #IMPLIED eller #FIXED, antager XML-processoren standardværdien for attributten, når den udelades.
Attributtyper
Nøgleordet CDATA i eksemplet på en attributerklæring indikerer, at vi ønsker, at attributten skal indeholde tegndata. CDATA er en af flere muligheder for attributtyper. Den komplette liste følger senere.
En ID-attribut skal have en erklæret standard på #IMPLIED eller #REQUIRED. Intet element kan have mere end én ID-attribut.
Intet element kan have mere end én NOTATION-attribut.
I stedet for at oprette et enkelt element til både billeder og film opretter vi her to separate elementer <billede> og <film>. For hvert af disse elementer angiver DTD'en to forskellige programmer, der kan anvendes til visning af filen. Afgørelsen af, hvilket program der skal anvendes, bestemmes af hver enkelt <element>-kode i XML-kroppen.
xml:lang-attributten
Med attributten "xml:lang" kan du angive hvilket sprog der anvendes i et element. Denne attribut bør indeholde en af de følgende:
Bemærk: Disse attributter ikke er defineret på forhånd du skal erklære dem, inden du anvender dem.
For at indikere det ønskede sprog skal du blot tilføje dets sprogkode. Den følgende DTD angiver f.eks. et "xml:lang"-element, og elementet i XML-kroppen angiver sproget engelsk ved hjælp af ISO 639:
<!-- I DTD'en -->Du kan angive et sprogs undertype ved at føje en bindestreg og en forkortelse til sprognavnet. Det følgende element angiver f.eks. internationalt engelsk (anvendes i Storbritannien) i modsætning til U.S. engelsk:
<!-- I XML-kroppen -->xml:space-attributten
Med attributten "xml:space" kan du indikere, at det program der behandler XML'en skal overlade alle blanktegn i et element og dets produkter som de er (medmindre et af elementets produkter nulstiller koden). Den følgende DTD angiver f.eks. en "xml:space"-attribut, og elementet i XML-kroppen indstiller denne attribut til at "bibeholde" dette til det pågældende element og dets produkter:
<!-- I DTD'en -->IGNORE og INCLUDE
Du kan anvende koden <![IGNORE[]]> til at bede XML-analysatoren om at ignorere en tekstudvidelse i en ekstern DTD. Se f.eks. på det følgende:
<-- Denne elementerklæring analyseres på almindelig vis: -->Du kan bede XML-analysatoren om at behandle tekst i koderne blot ved at ændre IGNORE til INCLUDE, som du kan se her:
<-- Denne elementerklæring analyseres på almindelig vis: -->Anvendelse af offentlige DTD'er
Som nævnt tidligere kan du henvise til en ekstern DTD i et XML-dokuments DOCTYPE-erklæring på denne måde:
<?xml version="1.0" standalone="no">Hvis du anvender en DTD, der er godkendt af en organisation, f.eks. af The International Standards Organization (ISO), kan du anvende en PUBLIC-entitetshenvisning, der angiver navnet på en offentlig tilgængelig kopi af DTD'en. Når du gør det, skal du også angive URL-adressen på en SYSTEM-DTD-fil, så der er en reservemulighed, hvis PUBLIC-kopien af DTD'en ikke er tilgængelig.
<?xml version="1.0" standalone="no">Kombinér og opret sammensatte DTD'er
Ind imellem kan du måske have behov for at oprette separate DTD'er for at definere forskellige dele af et dokument. Din organisation anvender måske én DTD til sidehoveder og sidefødder i alle organisationens XML-filer, men forskellige DTD'er til selve indholdet i de dokumenter, der produceres i forskellige dele af organisationen. Du kan løse sådanne situationer ved blot at oprette en enkel ny DTD, der indeholder de forskellige DTD'er, du har brug for og angive en rækkefølge for rodelementerne som her:
<!ENTITY % standardHoved SYSTEM "standardHoved.dtd">For dokumenter, der er oprettet med denne DTD, er <KVRapDok> rodelementet, og <standardHoved>, <KVRap> og <standardFod> dets umiddelbare underelementer. Et dokument, der anvender denne DTD, kan minde om det, du ser her:
<?xml version="1.0" standalone="no">Foretage lokale ændringer af importerede DTD'er
Visse arbejdsforløb involverer måske DTD'er, der er næsten ens til en række anvendelser, men som kræver mindre tilpasninger for at kunne anvendes i en bestemt afdeling eller gruppe. Dette er let at løse. Du skal blot inkludere DTD'en i den pågældende DOCTYPE-erklæring og herefter tilføje nødvendige afmærkningserklæringer til det interne undersæt.
Du kan ikke omdefinere et element der allerede er defineret i den eksterne DTD, men du kan omdefinere entiteter og standardværdier for attributter.
Sammenholde en XML-fil med en DTD
Hvis du skriver dine XML-dokumenter i et tekstbehandlingsprogram, kan du gennemlæse den tilhørende DTD og sikre dig, at den overholder reglerne. Men du kan ikke være helt sikker på det, før du sammenholder XML-dokumentet med DTD'en med et program, der kaldes en godkendende analysator. Den godkendende analysator læser DTD'en og undersøger herefter XML-filen for at sikre, at det overholder reglerne i DTD'en. En god validerende analysator bør også informere dig om eventuelle problemer, den finder.
Husk: Hvis du vil undersøge, om et XML-dokument overholder en bestemt DTD, skal du anvende en godkendende XML-analysator, ikke blot en almindelig XML-analysator. Der findes mange XML-analysatorer, der fortæller dig, hvis en XML-fil er veludformet, men betydeligt færre, der fortæller dig, om en XML-fil er gyldig.
Se appendiks B "DTD en hurtig gennemgang" i kapitel 7 "Appendiks" for et hurtigt overblik over DTD-funktioner og -konventioner.
Bør du udvikle en ny DTD der er tilpasset, så den opfylder behovene i din organisation? Eller bør du anvende en standard-DTD, der vil nedsætte din udviklingstid og medvirke til at sikre, at du kan udveksle informationer med andre virksomheder i dine branche?
Der er fordele ved begge metoder. Hvis du opretter din egen DTD helt fra grunden, har du total kontrol med strukturen i denne DTD og processen med at opdatere den. Men du kan også se frem til en betydelig investering i form af tid og besvær, og du skal omhyggeligt overveje behovene fra alle, der skal anvende DTD'en. Hvis du anvender en standard-DTD, skal du ikke gennem DTD'ens udviklingsproces. Til gengæld er du nødt til at følge DTD'ens konventioner og overholde den struktur, den definerer.
Fordele og ulemper ved industristandard-DTD'er
Regner du med at udveksle informationer med andre organisationer, kan en standard-DTD være en god idé. Standard-DTD'en kan medvirke til at sikre, at informationsudvekslingen foregår smertefrit, og at de informationer, du koder, kan genbruges i andre sammenhænge. Det er i virkeligheden en af grundene til, at XML blev udviklet: For at hjælpe med standardisering af de formater der bruges til arkivering og udveksling af informationer.
Men anvendelse af en industristandard-DTD kan også medføre nogle udfordringer, fordi organisationer kan have meget forskellige behov, også selvom de data, der arbejdes med, grundlæggende er ens. Industristandard-DTD'er kan tilpasses i en organisation, men det er til dels i modstrid med dens formål, der er at sikre, at informationer gemmes i et ensartet format mellem organisationer.
Kan jeg anvende en industristandard-DTD?
Om du kan anvende en standard-DTD afhænger af en række faktorer.
Findes der en industristandard-DTD til din branche?
For at besvare dette spørgsmål kan du holde øje med industristandard-DTD'er på World Wide Web. To gode steder at studere nærmere er www.schema.net og www.xml.org.
Hvis der findes en industristandard-DTD, opfylder den så dine krav?
Overvej disse spørgsmål omhyggeligt. Hvis den DTD, du vælger, ikke opfylder dine krav, vil den samlede effekt af manglerne sikker stige med tiden.
Hvis der ikke findes en industristndard-DTD til dir virksomhedsområde, er der da én under udvikling?
Udvidelse af industristandard-DTD'er
Nogle organisationer vælger at anvende en industristandard-DTD og tilpasser herefter DTD'en, så den passer til deres konkrete behov. For at kunne anvende ISO-standarden "book" SGML DTD, foretog University of California Press en række justeringer af DTD'en og tilføjede elementer, så informationer som f.eks. kapitelundertitler og kapitelspecifikke forfatterlinier kan gemmes. ISO (International Standards Organization) har udgivet retningslinier for tilpasning af dens DTD'er, så selvom du foretager en tilpasning, er din nye DTD stadig på en måde standardiseret.
Hvad nu, hvis du har brug for at udveksle data med andre organisationer, der anvender den originale, ikke-modificerede DTD? Nogle organisationer vælger at oprette hjælpeprogrammer der kan konvertere dokumenter, der overholder deres tilpassede DTD, til dokumenter, der overholder den originale DTD. Denne løsningsmulighed indeholder mange af fordelene ved en tilpasset DTD, samtidig med at du kan udveksle data med andre organisationer i branchen.
Med avenue.quark kan du anvende en DTD til at udtrække struktureret indhold fra QuarkXPress Passport-dokumenter og gemme det i et filsystem eller i en database. Det følgende afsnit forklarer, hvordan processen fungerer i en tænkt situation.
Situationen
Forestil dig, at din virksomhed har oprettet et stort antal tekniske beskrivelser i QuarkXPress Passport-format, og du nu ønsker at eksportere indholdet i XML-format og gemme det i en database, så du kan stille det til rådighed for dine kunder på web'en. De tekniske beskrivelser anvender alle de samme QuarkXPress Passport-skabeloner og -forme.
Trin 1: Opret eller vælg en DTD
Inden du kan udtrække indholdet fra de tekniske beskrivelser i et struktureret format, skal du have oprettet en struktur, der kan rumme det pågældende indhold. DTD'en indeholder en sådan struktur.
Se "Arbejde med DTD'er" i dette kapitel for flere oplysninger om DTD'er.
Du kan anskaffe en DTD til brug i avenue.quark på to forskellige måder:
Trin 2: Opret et XML-dokument
Opret et nyt XML-dokument i avenue.quark og angiv den DTD, du valgte i trin 1. Alle obligatoriske elementer i DTD'en indsættes automatisk i XML-dokumentet.
Paletten XML-arbejdsområde i et nyt XML-dokument
Trin 3: Opret et kodningsregelsæt
En af de unikke funktioner i avenue.quark er regelbaseret kodning. I regelbaseret kodning opretter du et kodningsregelsæt, der fortæller avenue.quark, at et afsnit, der f.eks. anvender formen "Overskrift", normalt skal kodes som <Titel>. Du kan også anvende kodningsregelsæt til at angive, hvordan bestemte tegnforme, tekstfarver og lokale forme skal kodes. (Se kapitel 5 "Kodningsregelsæt" for flere informationer).
Trin 4. Gem XML-dokumentet som en skabelon
Gem XML-dokumentet som en skabelon med navnet "TeknBesk.xmt". Skabelonen indeholder DTD'en til den tekniske beskrivelse og det kodningsregelsæt, du oprettede i trin 3. Du kan anvende denne skabelon til at oprette lige så mange XML-filer med tekniske beskrivelser, som du ønsker på den samme eller på flere computere.
Trin 5. Åbn det QuarkXPress Passport-dokument, du vil kode
Trin 6. Opret et nyt XML-dokument baseret på XML-skabelonen til den tekniske beskrivelse
Når du opretter et nyt avenue.quark-XML-dokument, skal du starte med at vælge den skabelon på listen Skabelon, som du vil basere det nye XML-dokument på. I dette eksempel anvender vi "TeknBesk.xmt" fra trin 4.
Med skabelonen "TeknBesk.xmt" er det let at kode en teknisk beskrivelse, der er oprettet i QuarkXPress Passport.
Trin 7. Udfør regelbaseret kodning
For at udføre regelbaseret kodning skal du holde Command-tasten nede og trække (Mac OS) eller holde Ctrl-tasten nede og trække (Windows) det felt der indeholder den tekniske beskrivelse hen til elementet <teknBesk> i rullelisten XML-træ. Avenue.quark koder automatisk dokumentet i henhold til de regler, der findes i kodningsregelsættet.
Hvis du vil anvende regelbaseret kodning skal du blot holde Command-tasten nede og trække (Mac OS) eller holde Ctrl-tasten nede og trække (Windows) feltet til det ønskede element på listen XML-træ. Avenue.quark anvender kodningsregelsættet til at kode så meget af indholdet som muligt.
Trin 8. Udfør eventuel nødvendig manuel kodning
Nogle af dine tekniske beskrivelser er måske helt færdige, når den regelbaserede kodning er færdig. Andre har måske særligt indhold, der kræver manuel kodning, eller indhold der kan kodes på forskellige måder. For at løse sådanne situationer skal du blot trække det ønskede indhold til det ønskede element på paletten XML-arbejdsområde.
Trin 9. Anvend dit strukturerede indhold på web og andre steder
Når indholdet fra dine tekniske beskrivelser foreligger i XML-format, kan du kan anvende en række værktøjer til at anbringe det på web. Du kan f.eks. præsentere det som almindeligt XML, så det kan vises i nyere web-browsere som f.eks. Microsoft Internet Explorer 5.0. XML-kodet indhold kan også anvendes på en række andre måder lige fra elektronisk informationsudveksling til produktion af trykte dokumenter.